package com.shujia.scala

object Demo14List {
  def main(args: Array[String]): Unit = {

    /**
      *
      * list 集合
      *
      * 有序不唯一
      *
      * 在scala这种默认使用的集合是不可变的集合
      *
      */

    val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 1)

    //通过下表获取数据
    println(list(1))

    //将集合中的元素通过分隔符拼接成一个字符串
    println(list.mkString("-"))

    //最大值
    println(list.max)
    //最小值
    println(list.min)
    //求和
    println(list.sum)
    //获取长度
    println(list.size)
    //获取第一个元素
    println(list.head)
    //获取最后一个元素
    println(list.last)

    //获取前几个元素，会返回一个新的集合
    println(list.take(2))

    //取出不包含第一个元素的所有元素
    println(list.tail)

    //反转集合，返回一个新的集合
    println(list.reverse)

    //判断是否为空
    println(list.isEmpty)

    //去重
    println(list.distinct)


    val l: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 1)


    /**
      * map函数，对集合中的元素进行处理，将集合中的袁术一个一个传递给后面的函数
      * 处理完了之后返回一个新的集合
      *
      * 数据的对应关系是一对一
      *
      */

    val l2: List[Double] = l.map((i: Int) => i.toDouble + 100)

    println(l2)


    /**
      * filter函数：对集合中的元素进行过滤
      * 将集合中的元素传递给后面的函数，如果函数最终返回true保留元素，如果函数返回false过滤元素
      *
      * 返回一个新的集合，新的集合类型和源集合一致
      *
      */

    //取出集合中所有的奇数
    val l3: List[Int] = l.filter((i: Int) => i % 2 == 1)

    println(l3)


    /**
      * sortBy:指定一个排序的列对数据进行排序，默认是升序
      *
      */

    val l4: List[Int] = l.sortBy((i: Int) => -i)

    println(l4)

    /**
      * sortWith: 传入一个比较规则
      *
      */

    val l5 = l.sortWith((x: Int, y: Int) => x > y)
    println(l5)


    /**
      * flatMap函数，将集合中的元素压扁，一行变多行
      *
      * 数据的对应关系是一对多
      *
      * map 函数需要的参数也是一个函数，函数的返回值必须是一个集合或者数组，
      * map函数会将返回的集合压扁
      *
      */

    val lines: List[String] = List("java,spark,hadoop", "spark,ava,hive", "hive,hbase")


    val words= lines.flatMap((line: String) => line.split(","))

    println(words)


  }

}
